/*
直接更新state的多个方法的对象     需要异步操作压迫在action内进行不可以在这个组件进行异步
 */
import Vue from 'vue'
import {
  RECEIVE_ADDRESS,
  RECEIVE_CATEGORYS,
  RECEIVE_SHOPS,
  RECEIVE_USER_INFO,
  RESET_USER_INFO,
  RECEIVE_INFO,
  RECEIVE_RATINGS,
  RECEIVE_GOODS,
  INCREMENT_FOOD_COUNT,
  DECREMENT_FOOD_COUNT,
  CLEAR_CART,
  RECEIVE_SEARCH_SHOPS
} from './mutation-types'
export default {

  [RECEIVE_ADDRESS](state, {
    address
  }) {
    state.address = address
    // console.log(state)
  },
  [RECEIVE_CATEGORYS](state, {
    categorys
  }) {
    state.categorys = categorys
  },

  [RECEIVE_SHOPS](state, {
    shops
  }) {
    state.shops = shops
  },

  [RECEIVE_USER_INFO](state, {
    userInfo
  }) {
    state.userInfo = userInfo
  },
  [RESET_USER_INFO](state) {
    state.userInfo = {}
  },

  [RECEIVE_INFO](state, {
    info
  }) {
    state.info = info
  },

  [RECEIVE_RATINGS](state, {
    ratings
  }) {
    state.ratings = ratings
  },

  [RECEIVE_GOODS](state, {
    goods
  }) {
    state.goods = goods
  },

  [INCREMENT_FOOD_COUNT](state, {
    food
  }) {
    // 用于将操作的值强制转换为布尔值并取反
    // 因为 数组中并没有这个值 因此没办法做出判断 只能对是否存在这个值进行判断  如果直接写true 或者false 只能通过第一次判断第二次这个数已经存在了  要是想一直能够通过food,count来判断对合否的处理  用！把这个元素转换成布尔值 因此无论是否存在都会进行转换成布尔值进行判断
    if (!food.count) { // 第一次增加
      // food.count = 1  // 新增属性(没有数据绑定)
      //  vue.set的用法        //此方法将数据变成响应式数据
      /*
      对象
      属性名
      属性值
       */
      // console.log(food)
      Vue.set(food, 'count', 1) // 让新增的属性也有数据绑定    //新增一个属性
      // 将food添加到cartFoods中
      state.cartFoods.push(food)
    } else {
      food.count++
    }
  },
  [DECREMENT_FOOD_COUNT](state, {
    food
  }) {
    if (food.count) { // 只有有值才去减   
      food.count--
      // console.log(food)
      // console.log(state)
      if (food.count === 0) {
        // 将food从cartFoods中移除
        //在cartFoods数组中指定删除food
        state.cartFoods.splice(state.cartFoods.indexOf(food), 1)
      }
    }
  },

  [CLEAR_CART](state) {
    // console.log(state.cartFoods)
    // 清除food中的count
    state.cartFoods.forEach(food => food.count = 0)
    // 移除购物车中所有购物项
    state.cartFoods = []
  },

  [RECEIVE_SEARCH_SHOPS](state, {
    searchShops
  }) {
    state.searchShops = searchShops
  },
}
